package log

import "context"

// 通过枚举定义传入上下文的键。

// [枚举从 1 开始](https://github.com/xxjwxc/uber_go_guide_cn#%E6%9E%9A%E4%B8%BE%E4%BB%8E-1-%E5%BC%80%E5%A7%8B)

type key int

const (
	logContextKey key = iota + 1
)

// WithContext 返回携带 logger 的上下文。
func WithContext(ctx context.Context) context.Context {
	return _defaultLogger.WithContext(ctx)
}

// WithContext 将 logger 加入上下文中。
func (l *logger) WithContext(ctx context.Context) context.Context {
	return context.WithValue(ctx, logContextKey, l)
}

// FromContext 从上下文中取出 logger 。
func FromContext(ctx context.Context) Logger {
	if ctx != nil {
		logger := ctx.Value(logContextKey)
		if logger != nil {
			return logger.(Logger)
		}
	}

	return WithName("Unknown-Context")
}
